//package com.bfsoft.springbootinit.config.login;
//
//import com.bfsoft.springbootinit.util.JwtUtils;
//import com.bfsoft.springbootinit.util.RedisService;
//import io.jsonwebtoken.Claims;
//import jakarta.annotation.Resource;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//
//@Component
//public class JwtInterceptor implements HandlerInterceptor {
//
//    @Resource
//    private RedisService redisService;
//
//    @Override
//    public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String token = request.getHeader("token");
//
//        if (token == null) {
//            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            return false;
//        }
//
//        try {
//            Claims claims = JwtUtils.parseToken(token);
//            if (JwtUtils.isTokenExpired(claims)) {
//                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//                return false;
//            }
//
//            // 从 Redis 获取用户详细信息
//            UserDetail userInfo = redisService.getUser(token);
//            if (userInfo == null) {
//                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//                return false;
//            }
//
//            // 将用户信息存入 ThreadLocal
//            UserContext.setUser(userInfo);
//        } catch (Exception e) {
//            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            return false;
//        }
//
//        return true;
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        UserContext.clear();  // 清除 ThreadLocal 中的用户信息
//    }
//}
